동적 계획법 【개인 메모】초초심자적 동적 계획법~피보나치 수열~ 정적 최적화로 문제를 해결했지만 처리하는 데이터 크기가 커지면 계산이 불가능 해지기 때문에 동적 계획법을 도입하고 싶다. MATLAB에서 할 것입니다. 이번에는 가장 간단한 곳에서 피보나치 수열을 구현하려고합니다. 근처에서 공부한 피보나치 수열. 피보나치 수열의 점화식에 따라 솔직하게 실장하면 다음과 같다. 위의 솔직한 방법에서는 n 번째를 계산하기 위해 n-1 번째와 n-2 번째를 계산해야... 동적 계획법dynamicprogrammingmatlab 엑셀 VBA에서 동적 계획법으로 DNA 서열의 정렬 만들기 Needleman-Wunsch 알고리즘 구현 이 기사는 DNA 서열의 정렬을 반환하는 엑셀 함수에 대한 기사입니다. 그렇다면 다음과 같은 정렬을 반환하는 함수입니다. 두 개의 행렬을 준비합니다. 정렬하고 싶은 2개의 DNA 서열의 길이를 m과 n으로 하면, 세로 m x 가로 n의 크기의 행렬입니다. 두 개의 DNA 서열은 한 글자씩 구분하여 셀에 넣고 행과 열의 레이블로 사용합니다. 초기 상태를 다음과 같이 합니다. 초기 상태를 다음과... 정렬VBA동적 계획법엑셀DNA 백준 17485, 진우의 달 여행 (Large) - DP 출발 지점 -> 각 지점으로의 최소 비용 값을 DP 배열에 채워나감 3가지 이동 방향: 왼쪽 아래, 아래, 오른쪽 아래 ex) (3, 5) 지점을 이전 지점으로부터 [왼쪽 아래] 방향으로 이동했을 때, 연료 최소값 1) DP 배열 정의: int[][][] dp dp[i][j][k]: 시작 지점 -> [i][j] 지점까지 이전 윗 행의 지점으로부터 k의 방향으로 이동한 최소 비용 k: 0, 1... DP알고리즘dynamic programming동적 계획법코딩 테스트백준 17485 진우의 달 여행 (Large)DP 백준 1082, 방 번호 - DP, Greedy, 문자열 1) DP 배열 정의: String[] dp dp[cost]: cost원 금액 내로 만들 수 있는 최대 숫자 문자열 출력, 최대 숫자: BigInteger(dp[m]) => dp[] 원소에 Leading-Zero 문자열이 저장될 수 있으므로, BigInteger를 이용하여 Leading-Zero 문자열을 제거 BigInteger 클래스 int, long 범위를 넘어가는 매우 큰 정수를 사용,... DPString백준 1082 방 번호알고리즘그리디greedydynamic programming동적 계획법코딩 테스트DP 백준 1106, 호텔 - DP 적어도 c명 영업 => c명, c+1명, ..., c+100명 (입력: 1개 도시에서 x원으로 영업하는 최대 고객 수 = 100명) => c명, c+1명, ..., c+100명 늘리는 최소 금액에서 최소값 적어도 i명(i <= 입력 c)을 늘리기 위한 최소 금액 => i명, i+1명, ..., c+100명 늘리는 최소 금액에서 최소값 dp[i]: 고객을 i명 만큼 늘릴 때, 최소 비용 출력,... DP알고리즘knapsack problem0-1 Knapsack Problemdynamic programming동적 계획법백준 1106 호텔코딩 테스트0-1 Knapsack Problem 백준 14722, 우유 도시 - DP 우유 순서: 딸기(0) -> 초코(1) -> 바나나(2) 최근에 마신 우유 종류에 따라 => "최근 마신 우유 종류를 구분"하여, DP 배열을 채움 1) DP 배열 정의: int[][][] dp dp[i][j][k]: [i][j] 지점까지 가장 최근에 k 우유를 마셨을 때, 마신 최대 우유 개수 (우유 종류 k: 딸기 0, 초코 1, 바나나 2) 출력, 최대 우유 개수 = dp[n-1][n-... DP알고리즘dynamic programming동적 계획법백준 14722 우유 도시코딩 테스트DP 백준 1520, 내리막 길 - DFS, DP, 메모이제이션 dp[y][x]: 시작 지점 [0][0] -> [y][x] 지점으로 내리막 길로 가는 경로 개수 dp[y][x] = 0 이면, 해당 [y][x]로 내리막 길로 갈 수 없음 출력 값 h = dp[m-1][n-1] DFS + DP 현재 지점 [y][x]가 끝 지점이면, DFS 탐색 종료 dp[y][x]: [y][x] 지점 -> 끝 지점으로 내리막 길로 가는 경로 개수 현재 지점 [y][x]에 대... DPDFS알고리즘그래프 탐색depth first search메모이제이션dynamic programming동적 계획법백준 1520 내리막 길깊이 우선 탐색memoization코딩 테스트DFS 백준 #1912. 연속합 정리 이 문제도 다이나믹 프로그래밍 기법으로 해결할 수 있는 문제이다. bottom-up 방식으로, 연속합의 최댓값을 비교해서 저장해 두고, 계속 수열을 비교해 나가면서 기존의 연속합의 최댓값과, 새로운 연속합의 값을 비교해 나가는 방식으로 문제를 해결했다. 수열의 숫자는 -1000보다 크거나 같고, 1000보다 같거나 작은 정수이다. 즉, 수열에 음수가 포함될 수 있다. 따라서 각 숫자가 ... ps동적 계획법cpp백준algorithmalgorithm 백준 12015. 가장 긴 증가하는 부분 수열 2 - 문제풀이 (c++) (dp) 🔎 12015. 문제 보기 💡 문제 풀기 전 이 문제와 비슷해보인다. 하지만 수열의 크기가 1,000,000로 시간 복잡도가 O(n^2)인 로직을 이용하면 시간을 통과하지 못한다. 그래서 O(nlog(n))로직을 생각해야 했다. 📝 코드 보기 🎈 코드 풀이 및 관련 개념 시간 복잡도: O(nlog(n)) 시간 n은 수열 A를 탐색하는 시간 시간 log(n)은 이분 탐색을 통하여 벡터의 값을 ... 동적 계획법백준bojboj 백준 2748번( 자바 ) 백준 2748번을 DP를 이용해 Java로 풀어봤다. 역시 이번에도 알고리즘 공부 시작한 지 얼마 안 된 티가 나는 실수를 해서 삽질을 짧게나마 했다...^^ 문제 조건대로면 90번째 피보나치수까지 커버를 해야 하는데, int형으로 받아서 계속 틀렸던 거다. 실제로 90번째 피보나치수를 구해보니 int 범위를 한참 벗어난다... long으로 바꿔주자마자 해결이 됐다. 아직 갈 길이 멀구나~.... boj동적 계획법DPalgorithmDP ** 알고리즘 오답노트 20 (백준 - 2579) 재귀 함수를 쓰는 문제이다. 하지만 최대 300개의 계단이 있을수 있다고하니, 재귀 함수를 썼을때 너무 깊게 들어가서 시간초과가 난다. 이럴때 동적 계획법을 적용시킨다.... dynamic programming3주차동적 계획법오답 노트알고리즘3주차
【개인 메모】초초심자적 동적 계획법~피보나치 수열~ 정적 최적화로 문제를 해결했지만 처리하는 데이터 크기가 커지면 계산이 불가능 해지기 때문에 동적 계획법을 도입하고 싶다. MATLAB에서 할 것입니다. 이번에는 가장 간단한 곳에서 피보나치 수열을 구현하려고합니다. 근처에서 공부한 피보나치 수열. 피보나치 수열의 점화식에 따라 솔직하게 실장하면 다음과 같다. 위의 솔직한 방법에서는 n 번째를 계산하기 위해 n-1 번째와 n-2 번째를 계산해야... 동적 계획법dynamicprogrammingmatlab 엑셀 VBA에서 동적 계획법으로 DNA 서열의 정렬 만들기 Needleman-Wunsch 알고리즘 구현 이 기사는 DNA 서열의 정렬을 반환하는 엑셀 함수에 대한 기사입니다. 그렇다면 다음과 같은 정렬을 반환하는 함수입니다. 두 개의 행렬을 준비합니다. 정렬하고 싶은 2개의 DNA 서열의 길이를 m과 n으로 하면, 세로 m x 가로 n의 크기의 행렬입니다. 두 개의 DNA 서열은 한 글자씩 구분하여 셀에 넣고 행과 열의 레이블로 사용합니다. 초기 상태를 다음과 같이 합니다. 초기 상태를 다음과... 정렬VBA동적 계획법엑셀DNA 백준 17485, 진우의 달 여행 (Large) - DP 출발 지점 -> 각 지점으로의 최소 비용 값을 DP 배열에 채워나감 3가지 이동 방향: 왼쪽 아래, 아래, 오른쪽 아래 ex) (3, 5) 지점을 이전 지점으로부터 [왼쪽 아래] 방향으로 이동했을 때, 연료 최소값 1) DP 배열 정의: int[][][] dp dp[i][j][k]: 시작 지점 -> [i][j] 지점까지 이전 윗 행의 지점으로부터 k의 방향으로 이동한 최소 비용 k: 0, 1... DP알고리즘dynamic programming동적 계획법코딩 테스트백준 17485 진우의 달 여행 (Large)DP 백준 1082, 방 번호 - DP, Greedy, 문자열 1) DP 배열 정의: String[] dp dp[cost]: cost원 금액 내로 만들 수 있는 최대 숫자 문자열 출력, 최대 숫자: BigInteger(dp[m]) => dp[] 원소에 Leading-Zero 문자열이 저장될 수 있으므로, BigInteger를 이용하여 Leading-Zero 문자열을 제거 BigInteger 클래스 int, long 범위를 넘어가는 매우 큰 정수를 사용,... DPString백준 1082 방 번호알고리즘그리디greedydynamic programming동적 계획법코딩 테스트DP 백준 1106, 호텔 - DP 적어도 c명 영업 => c명, c+1명, ..., c+100명 (입력: 1개 도시에서 x원으로 영업하는 최대 고객 수 = 100명) => c명, c+1명, ..., c+100명 늘리는 최소 금액에서 최소값 적어도 i명(i <= 입력 c)을 늘리기 위한 최소 금액 => i명, i+1명, ..., c+100명 늘리는 최소 금액에서 최소값 dp[i]: 고객을 i명 만큼 늘릴 때, 최소 비용 출력,... DP알고리즘knapsack problem0-1 Knapsack Problemdynamic programming동적 계획법백준 1106 호텔코딩 테스트0-1 Knapsack Problem 백준 14722, 우유 도시 - DP 우유 순서: 딸기(0) -> 초코(1) -> 바나나(2) 최근에 마신 우유 종류에 따라 => "최근 마신 우유 종류를 구분"하여, DP 배열을 채움 1) DP 배열 정의: int[][][] dp dp[i][j][k]: [i][j] 지점까지 가장 최근에 k 우유를 마셨을 때, 마신 최대 우유 개수 (우유 종류 k: 딸기 0, 초코 1, 바나나 2) 출력, 최대 우유 개수 = dp[n-1][n-... DP알고리즘dynamic programming동적 계획법백준 14722 우유 도시코딩 테스트DP 백준 1520, 내리막 길 - DFS, DP, 메모이제이션 dp[y][x]: 시작 지점 [0][0] -> [y][x] 지점으로 내리막 길로 가는 경로 개수 dp[y][x] = 0 이면, 해당 [y][x]로 내리막 길로 갈 수 없음 출력 값 h = dp[m-1][n-1] DFS + DP 현재 지점 [y][x]가 끝 지점이면, DFS 탐색 종료 dp[y][x]: [y][x] 지점 -> 끝 지점으로 내리막 길로 가는 경로 개수 현재 지점 [y][x]에 대... DPDFS알고리즘그래프 탐색depth first search메모이제이션dynamic programming동적 계획법백준 1520 내리막 길깊이 우선 탐색memoization코딩 테스트DFS 백준 #1912. 연속합 정리 이 문제도 다이나믹 프로그래밍 기법으로 해결할 수 있는 문제이다. bottom-up 방식으로, 연속합의 최댓값을 비교해서 저장해 두고, 계속 수열을 비교해 나가면서 기존의 연속합의 최댓값과, 새로운 연속합의 값을 비교해 나가는 방식으로 문제를 해결했다. 수열의 숫자는 -1000보다 크거나 같고, 1000보다 같거나 작은 정수이다. 즉, 수열에 음수가 포함될 수 있다. 따라서 각 숫자가 ... ps동적 계획법cpp백준algorithmalgorithm 백준 12015. 가장 긴 증가하는 부분 수열 2 - 문제풀이 (c++) (dp) 🔎 12015. 문제 보기 💡 문제 풀기 전 이 문제와 비슷해보인다. 하지만 수열의 크기가 1,000,000로 시간 복잡도가 O(n^2)인 로직을 이용하면 시간을 통과하지 못한다. 그래서 O(nlog(n))로직을 생각해야 했다. 📝 코드 보기 🎈 코드 풀이 및 관련 개념 시간 복잡도: O(nlog(n)) 시간 n은 수열 A를 탐색하는 시간 시간 log(n)은 이분 탐색을 통하여 벡터의 값을 ... 동적 계획법백준bojboj 백준 2748번( 자바 ) 백준 2748번을 DP를 이용해 Java로 풀어봤다. 역시 이번에도 알고리즘 공부 시작한 지 얼마 안 된 티가 나는 실수를 해서 삽질을 짧게나마 했다...^^ 문제 조건대로면 90번째 피보나치수까지 커버를 해야 하는데, int형으로 받아서 계속 틀렸던 거다. 실제로 90번째 피보나치수를 구해보니 int 범위를 한참 벗어난다... long으로 바꿔주자마자 해결이 됐다. 아직 갈 길이 멀구나~.... boj동적 계획법DPalgorithmDP ** 알고리즘 오답노트 20 (백준 - 2579) 재귀 함수를 쓰는 문제이다. 하지만 최대 300개의 계단이 있을수 있다고하니, 재귀 함수를 썼을때 너무 깊게 들어가서 시간초과가 난다. 이럴때 동적 계획법을 적용시킨다.... dynamic programming3주차동적 계획법오답 노트알고리즘3주차